home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / alv.sun / alv.lha / src / rasscale.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-08  |  1.9 KB  |  80 lines

  1. #include <stdio.h>
  2. #include "defs.h"
  3.  
  4. har           *progname;
  5. har           *filename;
  6. ixrect        *pr1, *pr2;
  7.  
  8. #ifdef STANDALONE
  9. ain(argc, argv, envp)
  10. #else
  11. asscale_main(argc, argv, envp)
  12. #endif
  13.     int             argc;
  14.     char          **argv;
  15.     char          **envp;
  16. {
  17.     register int    i, j;
  18.     float           scale;
  19.     int             xsize, ysize;
  20.     colormap_t        colormap;
  21.  
  22.     xsize = ysize = 0;
  23.     scale = 1.;
  24.  
  25.     if (strrchr(argv[0],'/') == NULL)
  26.         progname = strsave(argv[0]);
  27.     else progname = strsave(strrchr(argv[0],'/')+1);
  28.  
  29.     warning("progname = %s",progname);
  30.     parse_profile(&argc, argv, envp);
  31.  
  32.     while ((gc = getopt(argc, argv, "s:")) != EOF)
  33.         switch (gc) {
  34.         case 's':
  35.             scale = atof(optarg);
  36.             break;
  37.         case '?':
  38.             errflag++;
  39.             break;
  40.         }
  41.  
  42.     if (errflag)
  43.         error((char *) 0, "Usage: %s: [-s scale] [infile] [outfile]\n", progname);
  44.  
  45.     for (stream = 0; optind < argc; stream++, optind++)
  46.         if (stream < 2 && strcmp(argv[optind], "-") != 0)
  47.             if (freopen(argv[optind], mode[stream], f[stream]) == NULL)
  48.                 error("%s %s", PR_IO_ERR_INFILE, argv[optind]);
  49.  
  50.     if ((pr1 = pr_load(stdin, &colormap)) == NULL)
  51.         error(PR_IO_ERR_RASREAD);
  52.  
  53.     if (strcmp(progname, "double") == 0)
  54.         scale = 2.;
  55.     else if (strcmp(progname, "triple") == 0)
  56.         scale = 3.;
  57.     else if (strcmp(progname, "quad") == 0)
  58.         scale = 4.;
  59.     else if (strcmp(progname, "half") == 0)
  60.         scale = 0.5;
  61.     else if (strcmp(progname, "third") == 0)
  62.         scale = 1. / 3.;
  63.     else if (strcmp(progname, "quarter") == 0)
  64.         scale = 0.25;
  65.  
  66.     if (xsize == 0)
  67.         xsize = (int) (pr1->pr_size.x * scale);
  68.     if (ysize == 0)
  69.         ysize = (int) (pr1->pr_size.y * scale);
  70.  
  71.     if ((pr2 = mem_create(xsize, ysize, pr1->pr_depth)) == NULL)
  72.         error("%s : mem_create returned NULL\n", progname);
  73.  
  74.     for (j = 0; j < pr2->pr_size.y; j++)
  75.         for (i = 0; i < pr2->pr_size.x; i++)
  76.             pr_put(pr2, i, j, pr_get(pr1, (int) ((float) i / scale), (int) ((float) j / scale)));
  77.  
  78.     pr_dump(pr2, stdout, &colormap, RT_STANDARD, 0);
  79. }
  80.